import OSS from 'ali-oss';
import { Toast } from 'vant';
export function client(params) {
  return new OSS({
    endpoint: params.endpoint, // 上传路径
    // region: params.Region, // host路径, endpoint和region不要同时使用
    accessKeyId: params.accessKeyId, // oss的accessKeyId
    accessKeySecret: params.accessKeySecret, // accessKeySecret
    bucket: params.bucket,
    // enableProxy: true, //是否开启代理
    // secure:true  // 是否使用https协议
  });
}

//fileList:文件数组（和vant-upload组件绑定的数组）, ossParams: new的oss实例所需的参数对象，从接口获取
export function uploadOSS(fileList, ossParams){
  const ossClient = new OSS(ossParams);
  // const ossClient = new OSS({ // 测试用，上传公司前端oss
  //   endpoint: 'oss-cn-beijing.aliyuncs.com', // 上传路径
  //   region: 'oss-cn-beijing', // host路径
  //   accessKeyId: 'LTAI5tF1Rmr3FgRMLreBQjJ8', // oss的accessKeyId
  //   accessKeySecret: 'i4ENcVv0YVk5zcBmzc1Fj9XFYT42Rl', // accessKeySecret
  //   bucket: 'srwebapp', // 存储文件的bucket
  //   dir: 'test', // 上传的具体文件夹， 用‘/’分隔
  //   // enableProxy: true, // 是否开启代理
  //   // secure:true  // 是否使用https协议
  // })
  return new Promise((resolve, reject) => {
    Toast.loading({
      message: '上传中...',
      forbidClick: true,
      duration: 0
    });
    const promiseArray = fileList.map((item, index) => {
      if(item.file) {
        return new Promise((resolve, reject) => {
          let file = item.file;
          fileList[index].status ='uploading';
          fileList[index].message = '上传中...';
          let fileName = '';
          if(ossParams.randomName === '1') {
            const randomStr = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz23456789';
            let pwd = '';
            for (let i = 0; i < 16; i++) {
              pwd += randomStr.charAt(Math.floor(Math.random() * randomStr.length)); // 生成16位随机字符
            }
            let type = file.name.substr(file.name.indexOf('.'));
            fileName = `${ ossParams.dir }/${ Date.parse(new Date()) }${ pwd }${ type }`; // 上传路径 + 文件名称（时间戳+随机字符+后缀）
          } else {
            fileName = `${ ossParams.dir }/${ file.name }`;
          }
          // 分片上传，防止单个文件过大请求超时
          ossClient.multipartUpload(fileName, file).then(res => {
            if(res.res.status != 200) {
              fileList[index].status = 'failed';
              fileList[index].message = '上传失败';
              reject('上传失败');
            } else {
              fileList[index].status = '';
              fileList[index].message = '';
              resolve(res.name);
            }
          })
            .catch(err => {
              console.error(err);
              fileList[index].status = 'failed';
              fileList[index].message = '上传失败';
              reject(err);
            });
        });
      } else {
        return item.url;
      }
    });
    Promise.all(promiseArray).then(res => {
      Toast.clear();
      resolve(res);
    }).catch(err => {
      console.error('promiseAll:           ', err);
      Toast.fail('上传失败，请重新上传或检查网络');
      reject(err);
    });
  });
}
